package asionreachel.cn.smarthomedemo.utils;

import android.text.TextUtils;
import android.util.Log;

import asionreachel.cn.smarthomedemo.base.ConstantDefinition;


/**
 * Created by Simon(lyd) on 2016/9/27 15:12.
 * 描述：log输出控制类
 *       全部以log.e的形式输出（个人喜好）
 */

public class Mlog {

    public static void e(String msg) {
        if (ConstantDefinition.m_bIsDebug) {
            Log.e("测试", msg);
        }
    }

    public static void i(String msg) {
        if (ConstantDefinition.m_bIsDebug) {
            Log.e("数据", getLocation() + msg);
        }
    }

    public static void o(String msg) {
        if (ConstantDefinition.m_bIsDebug) {
            Log.e("操作", getLocation() + msg);
        }
    }

    /**
     * 获取类名
     * 筛选掉类名中不需要的字段
     *
     * @param clazz 类
     */
    private static String getClassName(Class<?> clazz) {
        if (clazz != null) {
            if (!TextUtils.isEmpty(clazz.getSimpleName())) {
                return clazz.getSimpleName();
            }
            return getClassName(clazz.getEnclosingClass());
        }
        return "";
    }

    /**
     * 获取log所在的类，方法，行数的信息
     */
    private static String getLocation() {
        String location = "[找不到类名]: ";
        /**
         * Thread.currentThread() 返回调用该方方法的线程，即当前线程
         * getStackTrace 返回一个数组,表示当前线程的堆栈。
         * [4] 根据getStackTrace所产生的数组显示[4]为调用该方法的线程说在类  在线程中调用也是
         */

        StackTraceElement traceElement = Thread.currentThread().getStackTrace()[4];
        try {
            Class clazz = Class.forName(traceElement.getClassName());
            location = "[" + getClassName(clazz) + ":"  //所在类名
                    + traceElement.getMethodName() + ":"  //所在方法名
                    + traceElement.getLineNumber() + "]: ";  //所在行数
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return location;
    }

}
